import copy
import time
from functools import wraps

def fetch_all_pages_with_delay(delay=1):
    """
    装饰器：自动分页获取全部数据，每次调用之间加入延时（默认1秒）
    """
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            # 复制传入的 data 参数，避免直接修改外部参数
            query_params = copy.deepcopy(kwargs.get("data", {}))
            # 默认从第一页开始
            query_params.setdefault("page", 1)
            kwargs["data"] = query_params

            # 调用获取第一页数据
            response = func(*args, **kwargs)
            data = response.get("data", {})
            all_records = data.get("records", [])
            total_pages = data.get("pages", 1)

            # 遍历从第二页开始的所有分页
            for page in range(query_params["page"] + 1, total_pages + 1):
                time.sleep(delay)  # 延时等待
                query_params["page"] = page
                kwargs["data"] = query_params
                page_response = func(*args, **kwargs)
                page_records = page_response.get("data", {}).get("records", [])
                all_records.extend(page_records)

            # 将全部数据合并到第一页返回结果中
            data["records"] = all_records
            return response
        return wrapper
    return decorator

# 使用示例
# @fetch_all_pages_with_delay(delay=1.5)
# def get_products(*, data):
#     # 此处为实际分页查询逻辑，下面仅为示例返回数据格式
#     # 例如根据 data["page"] 查询当前页数据
#     page = data.get("page", 1)
#     pageSize = data.get("pageSize", 50)
#     # 模拟返回结果（实际情况中应根据数据库或接口返回真实数据）
#     return {
#         "code": 200,
#         "data": {
#             "records": query_db(data),  # 根据分页参数返回数据列表
#             "total": 83,
#             "page": page,
#             "pageSize": pageSize,
#             "pages": 9  # 假设总共9页
#         },
#         "msg": "操作成功"
#     }
